package com.ungs.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import com.ungs.dao.CalidadDAO;
import com.ungs.entities.Calidad;

public class CalidadDAOImpl extends EntidadDAOImpl<Calidad> implements
		CalidadDAO {

	@SuppressWarnings("unchecked")
	@Override
	public List<Calidad> getCalidadByFilter(String param, boolean todos)
			throws HibernateException {
		List<Calidad> calidadList = new ArrayList<Calidad>();
		logger.info("Obteniendo calidad por descripcion");
		try {
			iniciaConexion();
			Criteria criteria = getSession().createCriteria(Calidad.class);
			criteria.add(Restrictions.like("descripcion", param + "%"));
			if (!todos) {
				criteria.add(Restrictions.eq("estadoLogico", "A"));
			}

			calidadList = criteria.list();

		} catch (HibernateException he) {
			logger.error("Error al traer el filtro de calidad: "
					+ Calidad.class + "DAO");
			manejaExcepcion(he);
			throw he;
		} finally {
			getSession().close();
		}

		return calidadList;
	}

	@SuppressWarnings("unchecked")
	@Override
	public Calidad getUltimoCalidad() throws HibernateException {
		Calidad calidad = null;
		List<Calidad> calidadList = new ArrayList<Calidad>();

		logger.info("Obteniendo el ultimo proceso");
		try {
			iniciaConexion();
			Criteria criteria = getSession().createCriteria(Calidad.class);
			criteria.setMaxResults(1);
			criteria.addOrder(Order.desc("id"));

			calidadList = (List<Calidad>) criteria.list();

			if (calidadList.size() > 0)
				calidad = calidadList.get(0);

		} catch (HibernateException he) {
			logger.error("Error al traer el ultimo calidad: " + Calidad.class
					+ "DAO");
			manejaExcepcion(he);
			throw he;
		} finally {
			getSession().close();
		}

		return calidad;
	}

}
